Javascript

Javascript负责交互,但是其作为一个语言,在语法层面很弱了。很多面向对象的抽象都没有,extend,mixin,package这些概念都没有,必须通过其他方式实现。而且其在不同的浏览器上行为也不一致。所以有了很多的框架:jQuery, dojo等弥补这些功能上的不足。

封装(package),解决命名冲突:

css上:

tabview.css

.menu{xxx}
.content{xxx}

treeview.css

.menu{xxx}
.content{xxx}

可以看到这两个css如果加载到同一个html文件下会产生冲突。解决方法有两个:

1.利用html的层级关系。

比如将tabview.css写做:

.tabview .menu{xxx}
.tabview .content{xxx}

2.在css每个元素都加上前缀:

.tabview_menu{xxx}
.tabview_content{xxx}

很多人用第一种方法,但是这里有个问题——依赖了html的层级关系。但是我们知道html负责结构,css是负责效果呈现。css应该和html尽可能的独立。所以这里依赖html已有的结构是部正确的。方法2比较合适,而且简单。

Javascript上:

利用闭包(closure)

(function(){
    var abc = "hello";
})()

这里的abc就不是全局的了。

依赖关系:

requirejs : 将js的文件,抽象出package。可以解决package之间的依赖关系。

比如:

//main.js 入口函数
require(['tabview','treeview'],function(tab,tree){
    var tabView = new tab.TabView(),
        treeView = new tree.TreeView();
});
//tabview.js
define(['animate'],function(a){
    function TabView(){
        this.animate = new a.Animate();
    };
    return {TabView:TabView};
});
//treeview.js
define(function(){
    function TreeView(){}
    return {TreeView:TreeView};
});
//animate.js
define(function(){
    function Animate(){};
    return {Animate:Animate};
});

requirejs会自动的load js文件,并且解决依赖关系

源代码里面只需要添加:

    <script src="js/require.js" data-main="js/main"></script>

就可以了。不需要手动的加载很多的js文件